package com.scut.scutzone.dao;
import com.scut.scutzone.entity.User;
import com.scut.scutzone.vo.domain.UserSearchResult;
import lombok.experimental.PackagePrivate;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

import java.util.Map;


/**
 * created by: zicheng xu
 * modified by:lifeng chan
 *
 */

@Repository
public interface UserAccess {

    /**
     * 通过id查找用户名
     * @param userId
     * @return 通过id查找到的username
     */
    String getUserNameById(@Param("user_id") int userId);


    /**
     * 通过名字获取用户,数据库遗留问题
     */
    User getUserByName(@Param("username") String username);
    /**
     * 涨粉或者掉粉,数据库设计的原因这里只改变粉丝数
     * 如果参数都是空则无效
     */
    void subscribeUserById(@Param("user_id") int user_id,@Param("up")boolean up);

    /**
     * 改变id对应用户的关注数
     * @param user_id
     * @param up_down
     */
    void updateFollowNumById(@Param("user_id")int user_id,@Param("up") boolean up_down);

    /**
     * 添加user,并设置user_id字段
     * @param user
     */
    void createUser(@Param("user") User user);


    /**
     * 更新密码
     * @param uuid
     * @param password
     * @return 如果更新成功则返回1
     */
    int updateUserPassword(@Param("uuid") String uuid, @Param("password") String password);

    /**
     * 更新用户除Uuid,user_id外的信息
     * @param user
     */
    void updateUser(@Param("u") User user);
    /**
     * 通过id获得User
     * @param id
     * @return 成功返回非空User对象，失败返回空的User对象
     */
    User getUserById(@Param("user_id") int id);

    /**
     * 通过Uuid获得User
     * @param uuid
     * @return 成功返回非空User对象，失败返回空的User对象
     */
    User getUserByUUID(@Param("uuid") String uuid);

    /**
     * 修改帖子数
     * @param user_id
     * @param up
     */
    void updatePostNumber(@Param("user_id")int user_id,@Param("up") boolean up);

    /**
     * 更新原则是只更新非空字段,如果都空了，则不会更新
     * @param avatar_img_name
     * @param bg_img_name
     */
    void updateAvatarAndBackgroundImgName(@Param("uuid") String uuid, @Param("avatar") String avatar_img_name,@Param("bg") String bg_img_name);

    /**
     * 检索用户，按名字查找
     * @param keyword 已插入转义字符的串
     * @param limit
     * @return
     */
    List<UserSearchResult> searchUser(@Param("uuid")String uuid, @Param("keyword") String keyword, @Param("limit") int limit);

}
